home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / rdma / iw_cm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  8.6 KB  |  259 lines

  1. /*
  2.  * Copyright (c) 2005 Network Appliance, Inc. All rights reserved.
  3.  * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.
  4.  *
  5.  * This software is available to you under a choice of one of two
  6.  * licenses.  You may choose to be licensed under the terms of the GNU
  7.  * General Public License (GPL) Version 2, available from the file
  8.  * COPYING in the main directory of this source tree, or the
  9.  * OpenIB.org BSD license below:
  10.  *
  11.  *     Redistribution and use in source and binary forms, with or
  12.  *     without modification, are permitted provided that the following
  13.  *     conditions are met:
  14.  *
  15.  *      - Redistributions of source code must retain the above
  16.  *        copyright notice, this list of conditions and the following
  17.  *        disclaimer.
  18.  *
  19.  *      - Redistributions in binary form must reproduce the above
  20.  *        copyright notice, this list of conditions and the following
  21.  *        disclaimer in the documentation and/or other materials
  22.  *        provided with the distribution.
  23.  *
  24.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  25.  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  26.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  27.  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  28.  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  29.  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  30.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  31.  * SOFTWARE.
  32.  */
  33. #ifndef IW_CM_H
  34. #define IW_CM_H
  35.  
  36. #include <linux/in.h>
  37. #include <rdma/ib_cm.h>
  38.  
  39. struct iw_cm_id;
  40.  
  41. enum iw_cm_event_type {
  42.     IW_CM_EVENT_CONNECT_REQUEST = 1, /* connect request received */
  43.     IW_CM_EVENT_CONNECT_REPLY,     /* reply from active connect request */
  44.     IW_CM_EVENT_ESTABLISHED,     /* passive side accept successful */
  45.     IW_CM_EVENT_DISCONNECT,         /* orderly shutdown */
  46.     IW_CM_EVENT_CLOSE         /* close complete */
  47. };
  48.  
  49. enum iw_cm_event_status {
  50.     IW_CM_EVENT_STATUS_OK = 0,     /* request successful */
  51.     IW_CM_EVENT_STATUS_ACCEPTED = 0, /* connect request accepted */
  52.     IW_CM_EVENT_STATUS_REJECTED,     /* connect request rejected */
  53.     IW_CM_EVENT_STATUS_TIMEOUT,     /* the operation timed out */
  54.     IW_CM_EVENT_STATUS_RESET,     /* reset from remote peer */
  55.     IW_CM_EVENT_STATUS_EINVAL,     /* asynchronous failure for bad parm */
  56. };
  57.  
  58. struct iw_cm_event {
  59.     enum iw_cm_event_type event;
  60.     enum iw_cm_event_status status;
  61.     struct sockaddr_in local_addr;
  62.     struct sockaddr_in remote_addr;
  63.     void *private_data;
  64.     u8 private_data_len;
  65.     void *provider_data;
  66. };
  67.  
  68. /**
  69.  * iw_cm_handler - Function to be called by the IW CM when delivering events
  70.  * to the client.
  71.  *
  72.  * @cm_id: The IW CM identifier associated with the event.
  73.  * @event: Pointer to the event structure.
  74.  */
  75. typedef int (*iw_cm_handler)(struct iw_cm_id *cm_id,
  76.                  struct iw_cm_event *event);
  77.  
  78. /**
  79.  * iw_event_handler - Function called by the provider when delivering provider
  80.  * events to the IW CM.  Returns either 0 indicating the event was processed
  81.  * or -errno if the event could not be processed.
  82.  *
  83.  * @cm_id: The IW CM identifier associated with the event.
  84.  * @event: Pointer to the event structure.
  85.  */
  86. typedef int (*iw_event_handler)(struct iw_cm_id *cm_id,
  87.                  struct iw_cm_event *event);
  88.  
  89. struct iw_cm_id {
  90.     iw_cm_handler        cm_handler;      /* client callback function */
  91.     void                *context;     /* client cb context */
  92.     struct ib_device    *device;
  93.     struct sockaddr_in      local_addr;
  94.     struct sockaddr_in    remote_addr;
  95.     void            *provider_data;     /* provider private data */
  96.     iw_event_handler        event_handler;   /* cb for provider
  97.                             events */
  98.     /* Used by provider to add and remove refs on IW cm_id */
  99.     void (*add_ref)(struct iw_cm_id *);
  100.     void (*rem_ref)(struct iw_cm_id *);
  101. };
  102.  
  103. struct iw_cm_conn_param {
  104.     const void *private_data;
  105.     u16 private_data_len;
  106.     u32 ord;
  107.     u32 ird;
  108.     u32 qpn;
  109. };
  110.  
  111. struct iw_cm_verbs {
  112.     void        (*add_ref)(struct ib_qp *qp);
  113.  
  114.     void        (*rem_ref)(struct ib_qp *qp);
  115.  
  116.     struct ib_qp *    (*get_qp)(struct ib_device *device,
  117.                   int qpn);
  118.  
  119.     int        (*connect)(struct iw_cm_id *cm_id,
  120.                    struct iw_cm_conn_param *conn_param);
  121.  
  122.     int        (*accept)(struct iw_cm_id *cm_id,
  123.                   struct iw_cm_conn_param *conn_param);
  124.  
  125.     int        (*reject)(struct iw_cm_id *cm_id,
  126.                   const void *pdata, u8 pdata_len);
  127.  
  128.     int        (*create_listen)(struct iw_cm_id *cm_id,
  129.                      int backlog);
  130.  
  131.     int        (*destroy_listen)(struct iw_cm_id *cm_id);
  132. };
  133.  
  134. /**
  135.  * iw_create_cm_id - Create an IW CM identifier.
  136.  *
  137.  * @device: The IB device on which to create the IW CM identier.
  138.  * @event_handler: User callback invoked to report events associated with the
  139.  *   returned IW CM identifier.
  140.  * @context: User specified context associated with the id.
  141.  */
  142. struct iw_cm_id *iw_create_cm_id(struct ib_device *device,
  143.                  iw_cm_handler cm_handler, void *context);
  144.  
  145. /**
  146.  * iw_destroy_cm_id - Destroy an IW CM identifier.
  147.  *
  148.  * @cm_id: The previously created IW CM identifier to destroy.
  149.  *
  150.  * The client can assume that no events will be delivered for the CM ID after
  151.  * this function returns.
  152.  */
  153. void iw_destroy_cm_id(struct iw_cm_id *cm_id);
  154.  
  155. /**
  156.  * iw_cm_bind_qp - Unbind the specified IW CM identifier and QP
  157.  *
  158.  * @cm_id: The IW CM idenfier to unbind from the QP.
  159.  * @qp: The QP
  160.  *
  161.  * This is called by the provider when destroying the QP to ensure
  162.  * that any references held by the IWCM are released. It may also
  163.  * be called by the IWCM when destroying a CM_ID to that any
  164.  * references held by the provider are released.
  165.  */
  166. void iw_cm_unbind_qp(struct iw_cm_id *cm_id, struct ib_qp *qp);
  167.  
  168. /**
  169.  * iw_cm_get_qp - Return the ib_qp associated with a QPN
  170.  *
  171.  * @ib_device: The IB device
  172.  * @qpn: The queue pair number
  173.  */
  174. struct ib_qp *iw_cm_get_qp(struct ib_device *device, int qpn);
  175.  
  176. /**
  177.  * iw_cm_listen - Listen for incoming connection requests on the
  178.  * specified IW CM id.
  179.  *
  180.  * @cm_id: The IW CM identifier.
  181.  * @backlog: The maximum number of outstanding un-accepted inbound listen
  182.  *   requests to queue.
  183.  *
  184.  * The source address and port number are specified in the IW CM identifier
  185.  * structure.
  186.  */
  187. int iw_cm_listen(struct iw_cm_id *cm_id, int backlog);
  188.  
  189. /**
  190.  * iw_cm_accept - Called to accept an incoming connect request.
  191.  *
  192.  * @cm_id: The IW CM identifier associated with the connection request.
  193.  * @iw_param: Pointer to a structure containing connection establishment
  194.  *   parameters.
  195.  *
  196.  * The specified cm_id will have been provided in the event data for a
  197.  * CONNECT_REQUEST event. Subsequent events related to this connection will be
  198.  * delivered to the specified IW CM identifier prior and may occur prior to
  199.  * the return of this function. If this function returns a non-zero value, the
  200.  * client can assume that no events will be delivered to the specified IW CM
  201.  * identifier.
  202.  */
  203. int iw_cm_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param);
  204.  
  205. /**
  206.  * iw_cm_reject - Reject an incoming connection request.
  207.  *
  208.  * @cm_id: Connection identifier associated with the request.
  209.  * @private_daa: Pointer to data to deliver to the remote peer as part of the
  210.  *   reject message.
  211.  * @private_data_len: The number of bytes in the private_data parameter.
  212.  *
  213.  * The client can assume that no events will be delivered to the specified IW
  214.  * CM identifier following the return of this function. The private_data
  215.  * buffer is available for reuse when this function returns.
  216.  */
  217. int iw_cm_reject(struct iw_cm_id *cm_id, const void *private_data,
  218.          u8 private_data_len);
  219.  
  220. /**
  221.  * iw_cm_connect - Called to request a connection to a remote peer.
  222.  *
  223.  * @cm_id: The IW CM identifier for the connection.
  224.  * @iw_param: Pointer to a structure containing connection  establishment
  225.  *   parameters.
  226.  *
  227.  * Events may be delivered to the specified IW CM identifier prior to the
  228.  * return of this function. If this function returns a non-zero value, the
  229.  * client can assume that no events will be delivered to the specified IW CM
  230.  * identifier.
  231.  */
  232. int iw_cm_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param);
  233.  
  234. /**
  235.  * iw_cm_disconnect - Close the specified connection.
  236.  *
  237.  * @cm_id: The IW CM identifier to close.
  238.  * @abrupt: If 0, the connection will be closed gracefully, otherwise, the
  239.  *   connection will be reset.
  240.  *
  241.  * The IW CM identifier is still active until the IW_CM_EVENT_CLOSE event is
  242.  * delivered.
  243.  */
  244. int iw_cm_disconnect(struct iw_cm_id *cm_id, int abrupt);
  245.  
  246. /**
  247.  * iw_cm_init_qp_attr - Called to initialize the attributes of the QP
  248.  * associated with a IW CM identifier.
  249.  *
  250.  * @cm_id: The IW CM identifier associated with the QP
  251.  * @qp_attr: Pointer to the QP attributes structure.
  252.  * @qp_attr_mask: Pointer to a bit vector specifying which QP attributes are
  253.  *   valid.
  254.  */
  255. int iw_cm_init_qp_attr(struct iw_cm_id *cm_id, struct ib_qp_attr *qp_attr,
  256.                int *qp_attr_mask);
  257.  
  258. #endif /* IW_CM_H */
  259.